package com.obelisco.vista.plantillas;

import java.util.List;

import nextapp.echo2.app.Alignment;
import nextapp.echo2.app.Color;
import nextapp.echo2.app.Column;
import nextapp.echo2.app.Component;
import nextapp.echo2.app.Extent;
import nextapp.echo2.app.Grid;
import nextapp.echo2.app.Insets;
import nextapp.echo2.app.event.ActionEvent;
import nextapp.echo2.app.event.ActionListener;
import nextapp.echo2.app.layout.ColumnLayoutData;
import nextapp.echo2.app.layout.GridLayoutData;
import nextapp.echo2.extras.app.layout.TabPaneLayoutData;

import com.obelisco.vista.componentes.BotonesDialogo;
import com.obelisco.vista.componentes.ContenedorReporte;
import com.obelisco.vista.componentes.DialogoMensaje;
import com.obelisco.vista.componentes.TablaDatosSimple;
import com.obelisco.vista.componentes.TipoAccion;
import com.obelisco.vista.componentes.TipoDialogo;
import com.obelisco.vista.componentes.TipoFuncion;
import com.obelisco.vista.componentes.TipoVentana;
import com.obelisco.vista.componentes.Ventana;
import com.obelisco.vista.componentes.VentanaListener;

import echopointng.ContainerEx;
import echopointng.ExtentEx;
import echopointng.layout.DisplayLayoutData;

public abstract class VentanaReporteBase extends VentanaBase {

	private Component padre;

	private DialogoMensaje dialogo;

	private TipoFuncion tipoFuncion;

	private String nombreFuncion;
	
	private ContenedorReporte contenedorReporte;
	
	private String tituloTab;
	
	private TabPaneLayoutData columnLayoutData;
	
	protected abstract void onCancelar();

	private ActionListener manejadorEventoDialogo = new ActionListener() {
		public void actionPerformed(ActionEvent evento) {
			dialogo.salir();
		}
	};

	public VentanaReporteBase() {
		super("", TipoVentana.REPORTE);
		onCrear();
		this.addVentanaListener(eventosVentana);
	}
	
	// Evento para el Manejo de Ventanas
	public VentanaListener eventosVentana = new VentanaListener() {

		public void onMostrar(Ventana ventana) {
			onConfigurar();
		}

		public void onSalir(Ventana ventana, boolean cerrar) {
		}
	};
  
	protected void onCrear() {
		// TODO Auto-generated method stub
		this.getAreaTrabajo().removeAll();

		ContainerEx container = new ContainerEx();
		// ContentPaneEx container = new ContentPaneEx();
		container.setBackground(Color.WHITE);

		 Column column = new Column();
		 container.add(column);

		// Grid grid = new Grid();
		// grid.setWidth(new Extent(100, Extent.PERCENT));
		// grid.setSize(1);

		// container.add(column);

		columnLayoutData = new TabPaneLayoutData();
		columnLayoutData.setTitle(getTituloTab());
		container.setLayoutData(columnLayoutData);

		if (contenedorReporte != null) {
			GridLayoutData gridLayoutData = new GridLayoutData();			
			gridLayoutData.setAlignment(new Alignment(Alignment.CENTER,
					Alignment.CENTER));
			
			 Grid grid = new Grid();
			 //grid.setStyleName("Obelisco.GridPaneDialogo");
			 grid.setWidth(new Extent(100, Extent.PERCENT));
			 grid.setSize(1);
			 column.add(grid);
			
			 contenedorReporte.setLayoutData(gridLayoutData);
			 grid.add(contenedorReporte);
			
			 ColumnLayoutData columnLayoutData2 = new ColumnLayoutData();
			 columnLayoutData2.setAlignment(new Alignment(Alignment.CENTER,
			 Alignment.CENTER));
			 columnLayoutData2.setInsets(new Insets(
			 new Extent(3, Extent.PERCENT),
			 new Extent(3, Extent.PERCENT),
			 new Extent(3, Extent.PERCENT),
			 new Extent(3, Extent.PERCENT)));
			 grid.setLayoutData(columnLayoutData2);

			DisplayLayoutData layoutData = new DisplayLayoutData();
			layoutData.setWidth(new ExtentEx("100%"));
			//contenedorReporte.setLayoutData(layoutData);

			//container.add(contenedorReporte);

		}

		getAreaTrabajo().add(container);

	}
	


	public abstract void setParametros(List listaParametros);

	public abstract void onFuncionPersonalizada(Object objeto,TipoFuncion tipoFuncion,String nombre);

	public abstract void inicializar();
	
	public abstract void onImprimirReporte();


	public void onConfigurar() {
		if (contenedorReporte != null) {
			contenedorReporte.inicializar();
		}
		inicializar();
	}

	@Override
	protected void accion(TipoAccion accion, TipoFuncion funcion, String nombre) {
		if (accion == accion.CANCELAR) {			
			onCancelar();
		}
	}
	
	@Override
	protected void funcion(TipoFuncion funcion, String nombre) {
		if (getContenedorReporte().onValidarDatos())
		{
			if (funcion == TipoFuncion.IMPRIMIR)
			{
				onImprimirReporte();
			}
		}
	}

	public TipoFuncion getTipoFuncion() {
		return tipoFuncion;
	}

	public void setTipoFuncion(TipoFuncion tipoFuncion) {
		this.tipoFuncion = tipoFuncion;
	}

	public Component getPadre() {
		return padre;
	}

	public void setPadre(Component padre) {
		this.padre = padre;
	}

	public String getNombreFuncion() {
		return nombreFuncion;
	}

	public void setNombreFuncion(String nombreFuncion) {
		this.nombreFuncion = nombreFuncion;
	}
	

	public ContenedorReporte getContenedorReporte() {
		return contenedorReporte;
	}

	public void setContenedorReporte(ContenedorReporte contenedorReporte) {
		this.contenedorReporte = contenedorReporte;
		
		
		if (contenedorReporte != null) {
			// Posiciono el Panel de Busqueda en el Lugar Indicado
			onCrear();
		}
		
	}



	public String getTituloTab() {
		return tituloTab;
	}



	public void setTituloTab(String tituloTab) {
		this.tituloTab = tituloTab;
		columnLayoutData.setTitle(tituloTab);
	}


}
